package com.example.mydesignmodule.observer;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author tgw
 * @date 2021/1/22
 *
 * 其实就是 多个观察者Observer类继承抽象类 然后持有 同一个 被观察者 的实例对象
 * 然后存储所有观察者 当被观察者改变动作 然后观察者 监听到改变
 *
 */
public class ObserverRunMain {



    public static void main(String[] args) {
        UserInfo userInfo = new UserInfo();
        userInfo.setAge("0");
        userInfo.setName("tgw0");
        MySubject<UserInfo> mySubject = new MySubject<UserInfo>();
//        MySubject1 mySubject1 = new MySubject1();
        FirstObserver<UserInfo,Subject<UserInfo>> firstObserver = new FirstObserver<UserInfo,Subject<UserInfo>>(mySubject);
        SecondObserver secondObserver = new SecondObserver(mySubject);
        mySubject.addObserver(firstObserver,firstObserver.getClass().getSimpleName());
        mySubject.update(firstObserver.getClass().getSimpleName());
        System.out.println("First observber change: 15");
        userInfo.setAge("15");
        userInfo.setName("tgw15");
        mySubject.setObservber(userInfo);
        mySubject.update(firstObserver.getClass().getSimpleName());

        System.out.println("Second observber change: 10");
        userInfo.setAge("10");
        userInfo.setName("tgw10");
        mySubject.setObservber(userInfo);
        mySubject.update(firstObserver.getClass().getSimpleName());

        mySubject.addObserver(secondObserver,secondObserver.getClass().getSimpleName());
        System.out.println("观察所有数据：");
        mySubject.notifyAllObserver();
    }
}
